﻿using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using DG.Common.EF.WPF;
using DG.Common.Patterns.MVVM;
using TCC.ControleFluxoDeCaixa.Model.Contas;

namespace TCC.ControleFluxoDeCaixa.Model.Fluxo
{
    public class Movimento : NotifyViewModel
    {
        private decimal _valorAbsoluto;
        private DateTime _dataDoMovimento;

        [Key]
        [FilteredAtributte(false)]
        public int MovimentoId { get; set; }

        [Required][FilteredAtributte(false)]
        public virtual Lancamento Lancamento { get; set; }
        public string Historico { get; set;}

        [Required]
        [Display(Name = "Data do Movimento")]
        public DateTime DataDoMovimento
        {
            get { return _dataDoMovimento; }
            set
            {
                if (value.Equals(_dataDoMovimento)) return;
                _dataDoMovimento = value;
                OnPropertyChanged("DataDoMovimento");
            }
        }

        [Required]
        [Display(Name = "Tipo de Movimento")]
        public TipoDeMovimento TipoDeMovimento { get; set; }

        [Required]
        [Range(0.01,(double)decimal.MaxValue)]
        public decimal ValorAbsoluto
        {
            get { return _valorAbsoluto; }
            set
            {
                if (value == _valorAbsoluto) return;
                _valorAbsoluto = value;
                OnPropertyChanged("ValorAbsoluto");
                OnPropertyChanged("Valor");
            }
        }

        [Required]
        [Display(Name = "Conta Vinculada")]
        public virtual ContaFinanceira Conta { get; set; }


        public decimal Valor
        {
            get { return (int)TipoDeMovimento * ValorAbsoluto; }
        }

        public override string ToString()
        {
            return string.Format("{0} ({1}): {2}", DataDoMovimento, Conta, Valor);
        }
    }
}
